package com.pai4j.remote.ugc;

import com.pai4j.common.bean.PAIResponseBean;
import com.pai4j.domain.vo.request.interaction.InteractionMessageQueryRequestVO;
import com.pai4j.domain.vo.request.interaction.MarkInteractionMessageReadRequestVO;
import com.pai4j.domain.vo.request.interaction.SystemMessageSendRequestVO;
import com.pai4j.domain.vo.response.interaction.InteractionMessagePageResponseVO;
import com.pai4j.domain.vo.response.interaction.InteractionMessageResponseVO;
import com.pai4j.domain.vo.response.interaction.InteractionMessageStatisticsVO;
import com.pai4j.domain.vo.response.interaction.SystemMessageSendResponseVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 * 互动消息远程调用客户端
 * 提供互动消息的查询、未读管理等功能
 * 
 * @author PAI4J Team
 */
@FeignClient(name = "pai4j-ugc-service", contextId = "ugcInteractionMessageClient")
public interface InteractionMessageClient {
    
    /**
     * 分页查询互动消息列表
     * 注意：浏览消息不会自动标记为已读，需要用户主动调用标记已读接口
     * 
     * @param request 查询请求
     * @return 分页结果
     */
    @PostMapping("/ugc-service/interaction/message/page")
    PAIResponseBean<InteractionMessagePageResponseVO> pageMessages(@RequestBody InteractionMessageQueryRequestVO request);
    
    /**
     * 查询接收者的未读互动消息数量
     * 
     * @param receiver 接收者账号
     * @return 未读消息数量
     */
    @GetMapping("/ugc-service/interaction/message/unread/count")
    PAIResponseBean<Long> getUnreadCount(@RequestParam("receiver") String receiver);
    
    /**
     * 查询指定类型的未读互动消息数量
     * 
     * @param receiver 接收者账号
     * @param type 消息类型
     * @return 未读消息数量
     */
    @GetMapping("/ugc-service/interaction/message/unread/count/type")
    PAIResponseBean<Long> getUnreadCountByType(@RequestParam("receiver") String receiver,
                                                @RequestParam("type") Integer type);
    
    /**
     * 获取互动消息统计信息
     * 
     * @param receiver 接收者账号
     * @return 统计信息
     */
    @GetMapping("/ugc-service/interaction/message/statistics")
    PAIResponseBean<InteractionMessageStatisticsVO> getStatistics(@RequestParam("receiver") String receiver);
    
    /**
     * 批量标记互动消息为已读
     * 用户查看互动消息后，前端应主动调用此接口标记已读
     * 
     * @param request 标记已读请求
     * @return 标记已读的消息数量
     */
    @PostMapping("/ugc-service/interaction/message/mark-read")
    PAIResponseBean<Integer> markMessagesAsRead(@RequestBody MarkInteractionMessageReadRequestVO request);
    
    /**
     * 一键全部已读
     * 标记指定用户的所有未读互动消息为已读
     * 
     * @param receiver 接收者账号
     * @param messageType 消息类型（可选，不传则标记所有类型）
     * @return 标记已读的消息数量
     */
    @PostMapping("/ugc-service/interaction/message/mark-all-read")
    PAIResponseBean<Integer> markAllAsRead(@RequestParam("receiver") String receiver,
                                           @RequestParam(value = "messageType", required = false) Integer messageType);
    
    /**
     * 查询互动消息详情
     * 
     * @param messageId 消息ID
     * @return 消息详情
     */
    @GetMapping("/ugc-service/interaction/message/detail/{messageId}")
    PAIResponseBean<InteractionMessageResponseVO> getMessageDetail(@PathVariable("messageId") Long messageId);
    
    /**
     * 发送系统消息
     * 系统消息是一种特殊的互动消息，用于平台公告、活动通知、系统维护通知等场景
     * 支持群发（全部用户或指定用户列表）
     * 
     * @param request 系统消息发送请求
     * @return 发送结果（成功数量、失败数量、批次ID）
     */
    @PostMapping("/ugc-service/interaction/message/system/send")
    PAIResponseBean<SystemMessageSendResponseVO> sendSystemMessage(@RequestBody SystemMessageSendRequestVO request);
}
